#include<bits/stdc++.h>
#define sd(n) scanf("%d",&n) 
#define sld(n) scanf("%lld",&n)
#define pd(n) printf("%d", (n))
#define pld(n) printf("%lld", n)
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
#define fi first
#define se second
const int N=1e5+10;
#define INF 0x7fffffff
typedef long long int ll;
using namespace std;
//----------------------------------------------------------------------------//
int n;//mx;
int a[N];
int b[N];
int sub[N];
void solve()
{
	sd(n);
	for(int i=1;i<=n;i++) sd(a[i]);
	for(int i=1;i<=n;i++) sd(b[i]);
	bool ok=true;
	int mx=0;
	// for(int i=1;i<=n;i++)
	// {
	// 	if(a[i]<b[i])
	// 	{
	// 		ok=false;break;
	// 	}
	// }
	// if(ok) puts("YES");
	// else puts("NO");
	for(int i=1;i<=n;i++)//找类似于差分的最大
	{
		sub[i]=a[i]-b[i];
		mx=max(mx,sub[i]);
		if(sub[i]<0)
		{
			puts("NO");
			return;
		}
	}
	 for (int i = 1;i <= n;i ++) 
	 {
        a[i] -= mx;
        if (a[i] < 0) a[i] = 0;//数组每次全部-1,但是最多减到0,但不会停止
        if (a[i] != b[i]) 
        {
            puts("NO");
            return ;
        }
    }
    puts("YES");

}

int main()
{
	int T;
	sd(T);
	while (T--)
	{
		solve();
	}
	return 0;
}